<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
setTimeout(() => {
 console.log('setTimeout start');//第五个打印
 new Promise((resolve) => {
 console.log('promise1 start');//第六个打印
 resolve();
 }).then(() => {
 console.log('promise1 end');//最后打印
 })
 console.log('setTimeout end');//第七个打印
}, 0);
function promise2() {
 return new Promise((resolve) => {
 console.log('promise2');//第二个打印
 resolve();
 })
}
async function async1() {
 console.log('async1 start');//第一个打印
 await promise2();
 console.log('async1 end');//第四个打印
}
async1();
console.log('script end');//第三个打印     
    //先执行同步任务，函数async1()，第一个打印async1 start;再执行promise2()，第二个打印promise2；
    //resolve是异步操作执⾏成功后的回调函数，所以先执行第40行，第三个打印script end
    //这时候函数promise2全部执行完毕，执行37行，第四个打印async1 end
    //同步完成之后，轮到异步任务中的宏任务setTimeout，按顺序执行，第五个打印setTimeout start，第六个打印promise1 start
    //第七个打印setTimeout end，这时候宏任务结束结束，检查有没有微任务，发现.then，最后打印promise1 end
    /* async1 start
    promise2
    script end
    async1 end
    setTimeout start
    promise1 start
    setTimeout end
    promise1 end */
</script>
</body>
</html>